import { sysLogin, sysProfile, sysUser } from '@/api/user'
import router, { asyncRoutes, constantRoutes } from '@/router'
import { resetRouter } from '@/router'
// import { Message } from 'element-ui'
export default {
  namespaced: true,
  state: {
    token: '',
    userInfo: '' // 用户信息
  },
  mutations: {
    // 修改token
    setToken (state, value) {
      state.token = value
    },
    // 修改用户信息
    setUserInfo (state, value) {
      state.userInfo = value
    },
    // 删除token与用户信息和重置路由
    logout (state) {
      state.token = ''
      state.userInfo = ''
      // 重置路由
      resetRouter()
    }
  },
  actions: {
    async toLogin (store, form) {
      // sysLogin(form)
      //   .then((res) => {
      //     store.commit('setToken', res.data)
      //   })
      //   .catch((error) => {
      //     console.log('catch:', error)
      //   })

      const res = await sysLogin(form)
      //   调用成功.res.data就是token
      // 登陆出错，提示一下
      //   1:提示非常不友好  2：以后所有接口都要写if  else,因为都有可能出错  解决方式：响应拦截统一错误处理
      // if (res.success) {
      // console.log('res的值', res)
      // console.log(3)
      store.commit('setToken', res.data)
      // } else {
      // alert(res.message)
      // Message.error(res.message)
      // }
    },
    // 获取用户信息
    async getUserInfo (store) {
      const res = await sysProfile()
      // 获取用户其它信息包括头像之类
      const res2 = await sysUser(res.data.userId)
      // 合并对象  1：{...res.data,...res2.data} 2:返回值=Object.assign({}，res.data,res2.data,....)
      const resultRes = Object.assign({}, res.data, res2.data)

      store.commit('setUserInfo', resultRes)

      // 已拿到当前用户的路由权限数据
      // 路由权限数据 resultRes.roles.menus
      // 动态路由数据: asyncRoutes
      // 匹配过程就是对动态路由数据做筛选？选择中当前项的meta.name的值在路由权限数据中是否存在
      const newArr = asyncRoutes.filter(item => {
        return resultRes.roles.menus.includes(item.meta.name)
      })
      newArr.push({ path: '*', redirect: '/404', hidden: true })
      // 通过router.addRoutes(匹配到的路由)添加有权限的动态路由
      router.addRoutes(newArr)
      // 同步到vuex中的routes模块内
      // user模块action调用routes模块的mutations方法
      store.commit('routes/setRoutesList', [...constantRoutes, ...newArr], {
        root: true
      })

      // addRoutes添加的路由不能立马使用，需要再经过一次导航守卫 就可以使用了
      // console.log('用户信息', resultRes)
    }
  },
  getters: {}
}
